package com.offcn.utils;

import io.jsonwebtoken.*;

import java.util.Date;

public class JwtUtil {
    // 过期时间
    public static final Long JWT_EXP = 1000 * 60 * 60L ; // 1个小时

    // 秘钥
    private static final String JWT_KEY = "ujiuye";

    /**
     * 生成令牌
     * @param id  jwt的id
     * @param subject  存储的内容 json格式
     * @param expMillis 过期时间 ，如果过期时间没有，可以设定一个统一的时间
     * @return
     */
    public static String createJwt(String id,String subject,Long expMillis){
        if (expMillis == null) {
            expMillis = JWT_EXP;
        }
        JwtBuilder builder = Jwts.builder()
                .setId(id)
                .setSubject(subject)
                .setIssuer("admin")
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + expMillis))
                .signWith(SignatureAlgorithm.HS256, JWT_KEY);
        return builder.compact(); // jwt字符串
    }

    /**
     * 解析令牌
     * @param jwt
     * @return
     */
    public static Claims parseJwt(String jwt){
        Claims body = Jwts.parser()
                .setSigningKey(JWT_KEY)
                .parseClaimsJws(jwt)
                .getBody();
        return body;
    }

    /**
     * 校验令牌是否合法
     * @param jwt
     * @return
     */
    public static boolean checkJwt(String jwt){
        try {
            Jwts.parser().setSigningKey(JWT_KEY).parseClaimsJws(jwt);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}
